package ar.edu.utn.frba.gdaia.src.util;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import ar.edu.utn.frba.gdaia.src.domain.ConceptoElemental;
import ar.edu.utn.frba.gdaia.src.domain.Regla;
import ar.edu.utn.frba.gdaia.src.domain.Situacion;
import ar.edu.utn.frba.gdaia.src.main.Cerebro;

/**
 * Esta clase acumula metodos utilitarios comunes.
 * 
 * @author Patricio
 *
 */
public class GDAIAUtil {

	/**
	 * Retorna una List (List) con todas las reglas externas que poseen la misma situacion dada como parametro.
	 * @param cerebro
	 * @return Lista con reglas cuyas situaciones iniciales son iguales a la situacion dada.
	 */
	public static List getAllReglasIgualSituacionInicial(Cerebro cerebro, Situacion sit) {
		List reglasARetornar = new ArrayList();
		// recorro las reglas externas para encontrar alguna para aplicar.
		for (Iterator it = cerebro.getReglasExternas().iterator(); it.hasNext();) {
			Regla reglaExterna = (Regla) it.next();
			// agrego las REGLAS cuya situacion inicial sea IGUAL a la situacion actual del cerebro.
			if(reglaExterna.getSituacionInicial().equals(sit)){
				reglasARetornar.add(reglaExterna);
			}
		}
		return reglasARetornar;
	}
	
	public static List getAllReglasIgualSituacionInicial(Cerebro cerebro, List sitList) {
		List reglasARetornar = new ArrayList();
		// recorro las reglas externas para encontrar alguna para aplicar.
		for (Iterator it = cerebro.getReglasExternas().iterator(); it.hasNext();) {
			Regla reglaExterna = (Regla) it.next();
			// agrego las REGLAS cuya situacion inicial sea IGUAL a la situacion actual del cerebro.
			if(sitList.contains(reglaExterna.getSituacionInicial())){
				reglasARetornar.add(reglaExterna);
			}
		}
		return reglasARetornar;
	}
	
	public static ConceptoElemental getConceptoByTemplate(Cerebro cerebro, ConceptoElemental ce){
		for (Iterator it = cerebro.getConceptos().iterator(); it.hasNext();) {
			ConceptoElemental conc = (ConceptoElemental) it.next();
			if(conc.equals(ce))
				return conc;
		}
		return null;
	}
	
}
